package com.jeesite.modules.web;

import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.jeesite.common.entity.Page;
import com.jeesite.common.web.BaseController;
import com.jeesite.modules.auth.entity.Authme;
import com.jeesite.modules.service.AuthmeService;

import java.util.List;

/**
 * Authme 数据接口控制器
 * 提供单条查询（按ID/按真实姓名）、分页查询功能
 * @author Qx
 * @version 2025-08-28
 */
@RestController
@RequestMapping(value = "/authme") // 统一接口前缀，符合 REST 规范
public class AuthmeController extends BaseController {

	@Autowired
	private AuthmeService authmeService;

	/**
	 * 1. 分页查询列表（核心接口）
	 * 功能：多条件分页查询 Authme 数据（支持按 username/realname 等字段筛选）
	 * 请求示例：GET /authme/list?pageNo=1&pageSize=10&realname=张三
	 */
	// 如需权限控制，取消 @RequiresPermissions 注释（需确保用户有对应权限）
	// @RequiresPermissions("authme:authme:view")
	@GetMapping(value = "list")
	public Page<Authme> listData(Authme authme, HttpServletRequest request, HttpServletResponse response) {
		// 初始化分页参数（从请求中获取 pageNo/pageSize，默认 pageNo=1、pageSize=20）
		authme.setPage(new Page<>(request, response));
		// 调用 Service 层分页查询方法（复用 QueryService 内置逻辑）
		return authmeService.findPage(authme);
	}

	/**
	 * 2. 按主键 ID 查询单条数据（推荐，语义清晰）
	 * 功能：精确查询指定 tid 的 Authme 记录（tid 对应数据库 id 字段）
	 * 请求示例：GET /authme/get/1（查询 tid=1 的记录）
	 */
//	@GetMapping(value = "get/{tid}") //禁用，因为sqlite那边的主表不知道为啥没有id ------->?
//	public Authme getByTid(@PathVariable Long tid) {
//		// 构建查询条件（按 tid 查，对应实体类主键）
//		Authme authme = new Authme();
//		authme.setTid(tid);
//		// 调用 Service 层 get 方法（继承自 QueryService，对应 Mapper 的 get 节点）
//		return authmeService.get(authme);
//	}

	/**
	 * 3. 按真实姓名精准查询（复用 Service 自定义方法）
	 * 功能：精准匹配 realname 对应的所有记录（非分页）
	 * 请求示例：GET /authme/getByRealname?realname=张三
	 */
	//注意，因为sqlite那边没有主键id为空，你唯一能够单一查询的方法就是这一个。它和mysql中的username绑定
	@GetMapping(value = "getByRealname")
	public Authme getByRealname(String realname) {
		// 直接调用 Service 层自定义方法（避免重复逻辑）
		return authmeService.findUsersByRealname(realname);
	}

	/**
	 * 4. 统计已登录用户数量（复用 Service 自定义方法）
	 * 功能：查询 islogged=1 的用户总数
	 * 请求示例：GET /authme/countLogged
	 */
	@GetMapping(value = "countLogged")
	public Integer countLoggedUsers() {
		return authmeService.getLoggedUserCount();
	}
	//批量注入和获取用的
	@GetMapping(value="getRealNameAndPassword")
	public List<Authme> getRealNameAndPassword(){
		return authmeService.getRealNameAndPassword();
	}
}